import List from '@ohos.util.List';
import { JSIModuleSpec } from './JSIModuleSpec';
import { JSIModule } from './JSIModule';
import { JSIModuleHolder } from './JSIModuleHolder';
import { JSIModuleType } from './JSIModuleType';
import HashMap from '@ohos.util.HashMap';

export class JSIModuleRegistry {

  private readonly mModules: HashMap<JSIModuleType, JSIModuleHolder> = new HashMap<JSIModuleType, JSIModuleHolder>();

  public JSIModuleRegistry() {}

  public getModule(moduleType: JSIModuleType): JSIModule {
    let  jsiModuleHolder: JSIModuleHolder = this.mModules.get(moduleType);
    if (jsiModuleHolder == null) {
      throw new Error("Unable to find JSIModule for class " + moduleType);
    }
//    return Assertions.assertNotNull(jsiModuleHolder.getJSIModule());
      return jsiModuleHolder.getJSIModule();
  }

  public registerModules(jsiModules: List<JSIModuleSpec<JSIModule>> ) {
//    for (let spec in jsiModules) {
//      this.mModules.set(spec.getJSIModuleType(), new JSIModuleHolder(spec));
//    }
  }

  public notifyJSInstanceDestroy() {
//    for (Map.Entry<JSIModuleType, JSIModuleHolder> entry : mModules.entrySet()) {
//      JSIModuleType moduleType = entry.getKey();
//
//      // Don't call TurboModuleManager.onCatalystInstanceDestroy
//      if (moduleType == JSIModuleType.TurboModuleManager) {
//        continue;
//      }
//
//      JSIModuleHolder moduleHolder = entry.getValue();
//      moduleHolder.notifyJSInstanceDestroy();
//    }
  }
}
